/**
 * @description 加密相关帮助函数
 */
import { MultiThreadCrypto } from './MultiThreadCrypto';
import { HashAlgorithm } from './types';

/**
 * 计算数据哈希值（适用于字符串、小文件、Blob或数据分片）
 * @param {string|File|Blob} data - 输入数据（文件、Blob）
 * @param {HashAlgorithm} algorithm - 哈希算法
 * @returns {Promise<string>} 哈希值
 */
export async function hash(
  data: string | File | Blob,
  algorithm: HashAlgorithm
): Promise<string> {
  // 根据数据类型处理
  if (typeof data === 'string') {
    return new MultiThreadCrypto().stringHash(data, algorithm);
  } else if (data instanceof Blob) {
    if (data.size > 10 * 1024 * 1024) {
      return new MultiThreadCrypto().fileHash(data, {
        algorithm,
        useThreads: true
      });
    } else {
      return new MultiThreadCrypto().smallDataHash(data, algorithm);
    }
  } else {
    throw new Error(`不支持的数据类型：${typeof data}`);
  }
}